package com.chinasoft.controller;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * ● 过滤器
 * 依赖于servlet容器。在实现上基于函数回调，可以对几乎所有请求进行过滤，
 * 使用过滤器的目的是用来做一些过滤操作，获取我们想要获取的数据，
 * 比如：在过滤器中修改字符编码；在过滤器中修改HttpServletRequest的一些参数，包括：过滤低俗文字、危险字符等。
 * ● 拦截器：
 * 依赖于web框架。在SpringMVC中就是依赖于SpringMVC框架。
 * 在实现上基于Java的反射机制，属于面向切面编程（AOP）的一种运用。
 * 由于拦截器是基于web框架的调用，因此可以使用Spring的依赖注入（DI）进行一些业务操作，
 * 同时一个拦截器实例在一个controller生命周期之内可以多次调用。
 */
public class MyInterceptor implements HandlerInterceptor {
    /**
     * ● preHandle()：该方法会在控制器方法前执行，其返回值表示是否中断后续操作。当其返回值为true时，表示继续向下执行；
     * 当其返回值为false时，会中断后续的所有操作（包括调用下一个拦截器和控制器类中的方法执行等）。
     * ● postHandle()：该方法会在控制器方法调用之后，且解析视图之前执行。可以通过此方法对请求域中的模型和视图做出进一步的修改。
     * ● afterCompletion()：该方法会在整个请求完成，即视图渲染结束之后执行。可以通过此方法实现一些资源清理、记录日志信息等工作
     */
    /**
         * 拦截器的拦截规则
         * 定义好拦截器后，需要设置拦截器的拦截规则（说明资源该拦截，什么资源不拦截）
         * 符号	说明
         * ?	匹配任何一个字符
         * *	匹配任何长度的字符
         * **	匹配多级目录的路径
      */
    //该方法会在控制器方法前执行，其返回值表示是否中断后续操作。当其返回值为true时，表示继续向下执行；
    //当其返回值为false时，会中断后续的所有操作（包括调用下一个拦截器和控制器类中的方法执行等）。
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("prehandle......................");
        return false ;
    }

    //方法会在控制器方法调用之后，且解析视图之前执行。可以通过此方法对请求域中的模型和视图做出进一步的修改。
    public void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("posthandle......................");
    }
    //afterCompletion()：该方法会在整个请求完成，即视图渲染结束之后执行。可以通过此方法实现一些资源清理、记录日志信息等工作
    public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion......................");
    }
}
